package thread;

/**
 * @author SWJ
 * @create 2021-06-24 9:33
 * 本类用于测试单例模式方法
 */
public class Singleton1 {
    public static void main(String[] args) {
/**通过类名调用静态的getSingle()获取本类对象
 * 通过类名直接获取对象*/
        MySingle s1 = MySingle.getSinger();
        MySingle s2 = MySingle.getSinger();
//获取得到两个类型变量是否相等
        System.out.println(s1 == s2);
        //true

    }
}

/**
 * 如何调用公共方法
 * 之前使用方法都是创建本类对象进行调用
 */
class MySingle {
    /**思考：在构造方法与对象均私有化以后，我们需要调用公共的全局访问点来获取
     * 本类对象，但是，我们如何调用这个公共的方法呢？
     * 之前调用方法都是创建本类对象进行调用，但现在单例无法在外部创建本类对象
     * 解决方案：我们可以将公共方法设置为静态方法，这样就可以被类名直接调用
     * 需要注意：本方法中返回的对象也需要设置为静态，因为静态只能调用静态*/

    private MySingle() {
    }

    //2.创建一个本类对象，并且本类对象私有化
    static private MySingle singer = new MySingle();

    //3.提供一个全局访问点
    //用static修饰本方法、为了能够让外界通过类名直接调用本方
    static MySingle getSinger() {
        //4.把内部创建好的对象返回到调用位置
        return singer;
    }
}
